#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/mutex.h>
#include <linux/timer.h>
#include <linux/wait.h>
#include <linux/fs.h>
#include <linux/input.h>

#define KEY_DT_PATH "/my_key" 
#define NAME "my_key"

struct irq_key_desc
{
	unsigned int irq;           // 虚拟中断号
	unsigned int gpio;          // gpio编号
	unsigned int code;       	 // 按键码
	volatile unsigned int key_push_cnt;  // 按键按下的次数
	volatile unsigned int key_release_cnt;  // 按键松开的次数
};

// 设备结构体
struct my_key_dev {
	struct class* my_key_class;
	struct device* my_key_device;
	struct timer_list timer;    // 定时器
	struct input_dev* key_input_dev;
	struct irq_key_desc key_desc;
};